home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 37
/
Aminet 37 (2000)(Schatztruhe)[!][Jun 2000].iso
/
Aminet
/
game
/
patch
/
jst32b_dev.lha
/
jst_dev
/
sources
/
src
/
DiskTools
/
gremdecode.asm
< prev
next >
Wrap
Assembly Source File
|
2000-03-31
|
3KB
|
178 lines
XDEF _DecodeTrack
GET_D0D1:MACRO
movem.l D3-D4,-(sp)
move.l (A0)+,D0 ; higher part (dest register)
move.l (A0),D3
lsr.l D6,D3 ; shift lower part with count
moveq #$20,D4
sub.l D6,D4
lsl.l D4,D0 ;higher part has to be shifted to fill
or.l D3,D0 ;the rest-place, a longword has 20 bits
movem.l (sp)+,D3-D4
move.w D0,D1
swap D0
ENDM
asmtest:
move.l #dectrack,A0
move.l #rawtrack,D0
bsr DecodeTrack
rts
; *** finds sync and shift
; in A0 rawdata
; out: D0 = 0 if success
; D1 = shift (0-15)
GetSync:
movem.l D2-D6/A1-A6,-(sp)
MOVE.L A0,A2
lea $7C00(A2),A4 ;end of rawtrack
.SHF2 MOVEQ.L #$10-1,D5
; *** try to find the sync shift (0 to 15)
.SHF1 MOVE.L (A2),D0 ; a longword of data
LSR.L D5,D0 ; shift it by D5
CMP.W #$4489,D0 ; sync?
BEQ.S .SY ; yes: found sync AND shift
DBF D5,.SHF1
ADDQ.L #2,A2
cmp.l A2,A4
beq ErrorSyn
BRA.S .SHF2
; ** shift has been found, sync too.
.SY MOVE.L (A2),D0
ADDQ.L #2,A2
LSR.L D5,D0 ;d5 is the shifting-number when sync was found
CMP.W #$4489,D0
BNE.S .SY
.1 MOVE.L (A2),D0
ADDQ.L #2,A2
LSR.L D5,D0
CMP.W #$4489,D0
BEQ.S .1
moveq #0,D0
move.l A2,A0 ; buffer synced
move.l D5,D1 ; shift
bra ExitSyn
ErrorSyn:
moveq #-1,D0
ExitSyn
movem.l (sp)+,D2-D6/A1-A6
rts
_DecodeTrack:
move.l 4(sp),D0
move.l 8(sp),A0
DecodeTrack
movem.l D1-A6,-(sp)
move.l A0,A1 ; dec
move.l D0,A0 ; raw
bsr GetSync
tst.l D0
bne syncerr
lea $7FFE(A0),A2
move.l D1,D6 ; shift : D6
subq.l #2,A0 ; longword reader
; *** until $5555 met
LB_C962
MOVE.L (A0),D0 ; read word
addq.l #2,A0
lsr.l D6,D0 ; shift
cmp.l A0,A2
beq decodeerr
CMP.W #$5555,D0
BNE.B LB_C962 ; until ==$5555
MOVE.W #$0BFF,D7
MOVE.W #$5555,D2
moveq #0,D3
subq.l #2,A0
decodeloop
; boucle executee $C00 fois (*2=$1800: 1 track)
GET_D0D1
; MOVE.W (A0)+,D0 ; read word
; MOVE.W (A0)+,D1 ; read word
AND.W D2,D0
AND.W D2,D1
ADD.W D1,D1
ADD.W D0,D1
MOVE.W D1,(A1)+ ; write word
ADD.W D1,D3
; SNIP
DBF D7,decodeloop
; MOVE.W (A0)+,D0 ; read word
; MOVE.W (A0)+,D1 ; read word
GET_D0D1
AND.W D2,D0
AND.W D2,D1
ADD.W D1,D1
ADD.W D0,D1
MOVE.W D1,D7
cmp.w D3,D7
bne decodeerr
movem.l (sp)+,D1-A6
moveq #0,D0
RTS
; ** garbage
; MOVE.W (A0)+,D0 ; read word
; MOVE.W (A0)+,D1 ; read word
GET_D0D1
AND.W D2,D0
AND.W D2,D1
ADD.W D1,D1
ADD.W D0,D1
MOVE.W D1,D6
syncerr:
movem.l (sp)+,D1-A6
moveq #-2,D0
rts
decodeerr:
movem.l (sp)+,D1-A6
moveq #-1,D0
rts
dectrack:
; blk.b $1900,0
rawtrack:
; incbin "sb2.raw"